
public class SparseArray {
    public static void main(String[] args) {
        // 将原始数据创建出来
        // 给数组赋值，遍历
        int chessArray1[][] = new int[11][11];
        chessArray1[1][2] = 1;
        chessArray1[2][3] = 2;
        for (int[] row : chessArray1) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        // 将原始数组转为二维数组
        // 先遍历二维数组得到非零数据的个数
        int sum = 0;
        for (int i = 0; i < chessArray1.length; i++) {
            for (int j = 0; j < chessArray1[0].length; j++) {
                if (chessArray1[i][j] != 0) {
                    sum++;
                }
            }
        }
        System.out.println("有效的数据个数" + sum);
        System.out.println("二维数组里的数组个数" + chessArray1.length);
        System.out.println("每个数组里有多少的元素" + chessArray1[0].length);
        // 创建对应的稀疏数组
        int sparseArr[][] = new int[sum + 1][3];
        // 给稀疏数组赋值
        // 记录原始数组的有多少行
        sparseArr[0][0] = chessArray1.length;
        // 记录原始数组有多少列
        sparseArr[0][1] = chessArray1[0].length;
        // 记录原始数组的有效数组，并记录再稀疏数组的第一行
        sparseArr[0][2] = sum;
        // 遍历原始数组，取出有效数组加入稀疏数组
        // 记录当前的记录情况
        int count = 1;
        for (int i = 0; i < chessArray1.length; i++) {
            for (int j = 0; j < chessArray1[0].length; j++) {
                if (chessArray1[i][j] != 0) {
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArray1[i][j];
                    count++;
                }
            }
        }
        for (int[] row : sparseArr) {
            for (int data : row) {
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }
        // 把稀疏数组还原
        int row = sparseArr[0][0];
        int cos = sparseArr[0][1];
        // 创建一个新的数组
        int chessArray2[][] = new int[row][cos];
        // 遍历稀疏数组
        // System.out.println(sparseArr[0].length);
        for (int i = 1; i < sparseArr.length; i++) {

            // System.out.println(sparseArr[i][sparseArr[0].length - 1]);
            chessArray2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][sparseArr[0].length - 1];

        }
        // 遍历新数组
        System.out.println("______________________新数组遍历");
        for (int[] row2 : chessArray2) {
            for (int data : row2) {
                System.out.printf("%d\t", data);
            }
            System.out.println();

        }
    }

}